package com.ruoyi.custom.service.impl;

import java.beans.Transient;
import java.math.BigDecimal;
import java.sql.Timestamp;
import java.util.List;

import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.custom.domain.Member;
import com.ruoyi.custom.mapper.MemberMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.custom.mapper.BillMapper;
import com.ruoyi.custom.domain.Bill;
import com.ruoyi.custom.service.IBillService;
import com.ruoyi.common.core.text.Convert;

/**
 * 账单管理Service业务层处理
 *
 * @author wule
 * @date 2024-04-08
 */
@Service
public class BillServiceImpl implements IBillService {
	@Autowired
	private BillMapper billMapper;

	@Autowired
	private MemberMapper memberMapper;

	/**
	 * 查询账单管理
	 *
	 * @param id 账单管理主键
	 * @return 账单管理
	 */
	@Override
	public Bill selectBillById(Long id) {
		return billMapper.selectBillById(id);
	}

	/**
	 * 查询账单管理列表
	 *
	 * @param bill 账单管理
	 * @return 账单管理
	 */
	@Override
	public List<Bill> selectBillList(Bill bill) {
		return billMapper.selectBillList(bill);
	}

	/**
	 * 新增账单管理
	 *
	 * @param bill 账单管理
	 * @return 结果
	 */
	@Override
	@Transient
	public int insertBill(Bill bill) {

		bill.setCreateTime(new Timestamp(System.currentTimeMillis()));
		String num = bill.getDescription();

		bill.setDescription(bill.getKeyOne());
		bill.setCustomerType("1");//会员
		bill.setAmount(BigDecimal.valueOf(100));

		//根据会员id查询会员余额
		Member member = memberMapper.selectMemberById(bill.getCustomerId());

		// 判断余额是否足够
		if (member.getBalance().compareTo(new BigDecimal(num)) < 0) {
			// 如果余额小于账单金额，返回-1
			return -1;
		}

		// 更新会员余额
		member.setBalance(member.getBalance().subtract(new BigDecimal(num)));
		//更新最后一次消费时间
		member.setLastConsumptionTime(DateUtils.getNowDate());

		// 更新会员余额
		memberMapper.updateMember(member);

		return billMapper.insertBill(bill);
	}

	/**
	 * 修改账单管理
	 *
	 * @param bill 账单管理
	 * @return 结果
	 */
	@Override
	public int updateBill(Bill bill) {
		return billMapper.updateBill(bill);
	}

	/**
	 * 批量删除账单管理
	 *
	 * @param ids 需要删除的账单管理主键
	 * @return 结果
	 */
	@Override
	public int deleteBillByIds(String ids) {
		return billMapper.deleteBillByIds(Convert.toStrArray(ids));
	}

	/**
	 * 删除账单管理信息
	 *
	 * @param id 账单管理主键
	 * @return 结果
	 */
	@Override
	public int deleteBillById(Long id) {
		return billMapper.deleteBillById(id);
	}
}
